package MemoriaFija;
import javax.swing.*;
import java.awt.*;
import java.lang.Object.*;
import java.awt.event.*;

public class RamFija extends JFrame{
	int p=0;
	int ALTO=50;
	int procesos_tamaño[]={0,0,0,0,0,0,0};
	Color procesos_color[]={Color.BLACK,Color.BLUE,Color.YELLOW,Color.RED,Color.MAGENTA,Color.PINK,Color.WHITE,Color.GREEN};
	JPanel formulario,panelCasillas,panelito;
	JLabel proceso,vacio,comentario,comentario2;
	JTextField cantidad_proceso;
	JButton agregarProceso,terminarProceso;
	JCheckBox casilla1,casilla2,casilla3,casilla4,casilla5,casilla6,casilla7;
	
	
	public RamFija(){
		super("Memoria Ram Partici�n Fija");
		
		Container contenedor= getContentPane();
        contenedor.setLayout(new BorderLayout());
		formulario=new JPanel();
		panelCasillas=new JPanel(new GridLayout(11,1));
		panelito=new JPanel(new GridLayout(2,2));
		
		vacio=new JLabel("");
		comentario=new JLabel(" ");
		comentario2=new JLabel(" ");
		proceso=new JLabel("Proceso: ");
		cantidad_proceso=new JTextField(5);
		agregarProceso=new JButton("Agregar Proceso");
		terminarProceso=new JButton("Teminar Proceso");
		
		formulario.add(proceso);
		formulario.add(cantidad_proceso);
		
		formulario.add(agregarProceso);
		add(formulario,BorderLayout.NORTH);
		
		casilla1=new JCheckBox("Proceso 1");
		casilla2=new JCheckBox("Proceso 2");
		casilla3=new JCheckBox("Proceso 3");
		casilla4=new JCheckBox("Proceso 4");
		casilla5=new JCheckBox("Proceso 5");
		casilla6=new JCheckBox("Proceso 6");
		casilla7=new JCheckBox("Proceso 7");
		panelCasillas.add(vacio);
		panelCasillas.add(vacio);
		panelCasillas.add(comentario2);
		panelCasillas.add(casilla1);
		panelCasillas.add(casilla2);
		panelCasillas.add(casilla3);
		panelCasillas.add(casilla4);
		panelCasillas.add(casilla5);
		panelCasillas.add(casilla6);
		panelCasillas.add(casilla7);
		panelito.add(terminarProceso);
		panelCasillas.add(panelito);
		
		add(panelCasillas,BorderLayout.EAST);
		
		ManejadorEventos manejador=new ManejadorEventos();
		agregarProceso.addActionListener(manejador);
		terminarProceso.addActionListener(manejador);
		casilla1.addActionListener(manejador);
		casilla2.addActionListener(manejador);
		casilla3.addActionListener(manejador);
		casilla4.addActionListener(manejador);
		casilla5.addActionListener(manejador);
		casilla6.addActionListener(manejador);
		casilla7.addActionListener(manejador);
		
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(350,600);
	    
		setVisible(true);
	}
	public void paint(Graphics g){
		super.paint(g);
		
		/*for(int i=0; i<=550;i=i+50)
			g.drawLine(i,0,i,500);
		for(int j=0; j<=600; j=j+50)
			g.drawLine(0,j,600,j);	]*/
				
		g.setColor(Color.GRAY);	
		g.fillRect(100,100,100,400);
		
		g.setColor(procesos_color[0]);
		g.fillRect(100,100,99,49);
		g.setColor(Color.CYAN);
		g.drawString("Sistema",130,110);
		g.drawString("Operativo",130,120);
		g.drawString("512K",135,142);
		
		g.setColor(procesos_color[1]);
		g.drawRect(100,150,99,49);
		g.fillRect(100,150,99,procesos_tamaño[0]);
		
		g.setColor(procesos_color[2]);
		g.drawRect(100,200,99,49);
		g.fillRect(100,200,99,procesos_tamaño[1]);
		
		g.setColor(procesos_color[3]);
		g.drawRect(100,250,99,49);
		g.fillRect(100,250,99,procesos_tamaño[2]);
		
		g.setColor(procesos_color[4]);
		g.drawRect(100,300,99,49);
		g.fillRect(100,300,99,procesos_tamaño[3]);
		
		g.setColor(procesos_color[5]);
		g.drawRect(100,350,99,49);
		g.fillRect(100,350,99,procesos_tamaño[4]);
		
		g.setColor(procesos_color[6]);
		g.drawRect(100,400,99,49);
		g.fillRect(100,400,99,procesos_tamaño[5]);
		
		g.setColor(procesos_color[7]);
		g.drawRect(100,450,99,49);
		g.fillRect(100,450,99,procesos_tamaño[6]);
		
		g.setColor(Color.ORANGE);
	}
	public float tamaño_proceso(float porcentaje){
		float  alto=ALTO*porcentaje/100;
		return alto;
	}
	public class ManejadorEventos implements ActionListener{
		public void actionPerformed(ActionEvent e){
			  if(e.getSource()==agregarProceso){
				  try{  
				    if(Integer.parseInt(cantidad_proceso.getText())<=512){
						System.out.println("agregamos proceso "+p+" a la memoria");
						agregandoProceso((int)tamaño_proceso((Integer.parseInt(cantidad_proceso.getText()))*100/512));
						repaint();
						p++;
					}
					else{
						JOptionPane.showMessageDialog(null,"Proceso demasiado grande.\nDebe ser menor a 512 KB","Error",JOptionPane.ERROR_MESSAGE);
						}
				     }
				     catch(ArrayIndexOutOfBoundsException error){
				     	JOptionPane.showMessageDialog(null,"Memoria llena.\nDebe terminar un proceso antes de ingresar uno.","Error",JOptionPane.ERROR_MESSAGE);
				     	}
		         }
		       if(e.getSource()==terminarProceso){
		       	System.out.print("Terminamos un proceso de la ");
		       		if(casilla1.isSelected()){
		       			System.out.println("casilla uno");
		       			quitandoProceso(0);
		       			repaint();
		       			casilla1.setSelected(false);
		       		}
		       		if(casilla2.isSelected()){
		       			System.out.println("casilla dos");
		       			quitandoProceso(1);
		       			repaint();
		       			casilla2.setSelected(false);
		       		}
		       		if(casilla3.isSelected()){
		       			System.out.println("casilla tres");
		       			quitandoProceso(2);
		       			repaint();
		       			casilla3.setSelected(false);
		       		}
		       		if(casilla4.isSelected()){
		       			System.out.println("casilla cuatro");
		       			quitandoProceso(3);
		       			repaint();
		       			casilla4.setSelected(false);
		       		}
		       		if(casilla5.isSelected()){
		       			System.out.println("casilla cinco");
		       			quitandoProceso(4);
		       			repaint();
		       			casilla5.setSelected(false);
		       		}
		       		if(casilla6.isSelected()){
		       			System.out.println("casilla seis");
		       			quitandoProceso(5);
		       			repaint();
		       			casilla6.setSelected(false);
		       		}
		       		if(casilla7.isSelected()){
		       			System.out.println("casilla siete");
		       			quitandoProceso(6);
		       			repaint();
		       			casilla7.setSelected(false);
		       		}
		       	}
			}
	}
	public void agregandoProceso(int proceso){
		int localidad=0;
		while(procesos_tamaño[localidad]!=0){
			localidad++;
			}
		procesos_tamaño[localidad]=proceso;
		}
	public void quitandoProceso(int posicion){
		procesos_tamaño[posicion]=0;
		}
    public static void main(String jaja[]){
    	new RamFija();
    }
}